package cn.cheegon.blog.service;

import cn.cheegon.blog.common.api.CommonPage;
import cn.cheegon.blog.entity.req.RegisterReq;
import cn.cheegon.blog.entity.req.ResetPasswordReq;
import cn.cheegon.blog.entity.req.UpdatePasswordReq;
import cn.cheegon.blog.entity.rsp.LoginRsp;
import cn.cheegon.blog.entity.rsp.UserInfoRsp;
import cn.cheegon.blog.model.UmsAdmin;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 后台用户表 服务类
 * </p>
 *
 * @author cheegon
 * @since 2024-06-21
 */
public interface UmsAdminService extends IService<UmsAdmin> {
    /**
     * 注册功能
     *
     * @param umsAdminParam
     * @return
     */
    @Transactional
    LoginRsp register(RegisterReq umsAdminParam);

    /**
     * 登录功能
     *
     * @param username 用户名
     * @param password 密码
     * @return 生成的JWT的token
     */
    LoginRsp login(String username, String password);

    /**
     * 用户列表
     *
     * @return
     */
    CommonPage<UserInfoRsp> list(int pageNum, int pageSize);


    /**
     * 获取用户信息
     *
     * @param username
     * @return
     */
    UserDetails loadUserByUsername(String username);

    /**
     * 根据用户名获取后台管理员
     *
     * @param username
     * @return
     */
    UmsAdmin getAdminByUsername(String username);

    /**
     * 获取当前用户信息
     *
     * @return
     */
    UmsAdmin getCurrUser();


    /**
     * 根据用户id获取用户
     *
     * @param id
     * @return
     */
    UmsAdmin getUserById(Long id);

    /**
     * 根据用户id获取用户
     *
     * @param ids
     * @return
     */
    Map<Long, UmsAdmin> getUserByIds(List<Long> ids);

    /**
     * 重置密码
     *
     * @param id
     * @param pwd
     * @return
     */
    @Transactional
    void resetPassword(Long id, String pwd);

    /**
     * 修改密码
     *
     * @param id
     * @param pwd
     * @param newPwd
     * @return
     */
    void updatePassword(Long id, String pwd, String newPwd);

    /**
     * 修改指定用户信息
     *
     * @param admin
     * @return
     */
    void update(UmsAdmin admin);

    void changeType(Long id, Integer type);

    void changeStatus(Long id, Integer status);

    /**
     * 删除指定用户
     *
     * @param id
     * @return
     */
    void delete(Long id);
}
